package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.SemesterEntity;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.LinkedHashMap;
import java.util.List;


/**
 * SemesterService接口
 * semester表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-14 14:41:55
 */
public interface SemesterService extends BaseServicePlus<SemesterEntity> {
	
	//region 模板生成：模糊查询
	/**
     * 根据学年学期名称模糊查询semester
     *
     * @param name  学年学期名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的semester
     * @author 田成荣
     * @since 2.0.0 2018-11-14 14:41:55
     */
    PageInfo<SemesterEntity> queryByLikeName(String name, Integer pageNo, Integer pageSize);
	//endregion

    /* **********************************以下为非模板生成的内容********************************* */


    /**
     * 获得学年学期(包含本学期)-井朝 2018年11月14日20:58:20
     * 例如getYearSemesterList(-1,1),获取结果（2016-2017学年第二学期，2017-2018学年第一学期，2017-2018学年第二学期）.
     *
     * @param startSemester 当前学年学期为0，从当前学年学期开始想获取的之前学年学期的数量
     * @param endSemester   当前学年学期为0，从当前学年学期开始想获取的之后学年学期的数量
     * @return LinkedHashMap<String , String> 学年学期代码-名字map对象
     */
    LinkedHashMap<String,String> getYearSememsterMap(int startSemester, int endSemester);


    /**
     * 查询所有SemesterEntity记录
     *胡泽宽--
     * @return 所有的semester集合
     * @author 胡泽宽
     * @since 2.0.0 2018年11月17日 15:25:08
     */
    PageInfo<SemesterEntity> querySemester(Integer pageNo, Integer pageSize);


    /**
     * 根据学年学期名称或code模糊查询semester
     *
     * @param name  学年学期名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的semester
     * @author 胡泽宽
     * @since 2.0.0 2018年11月21日 10:16:46
     */
    PageInfo<SemesterEntity> queryLikeNameorCode(String name, Integer pageNo, Integer pageSize);

    /**
     * 详细根据学年学期名称或code模糊查询semester
     *
     * @param name  学年学期名称
     * @param isGraduate  是否毕业
     * @param isCurrent  是否当前
     * @param pageNum   页码
     * @param pageSize 页数
     * @return 模糊查询的semester
     * @author 胡泽宽
     * @since 2.0.0 2018年11月21日 15:05:41
     */
    PageInfo<SemesterEntity> queryLikeNameorCodedetail(String name, Integer isGraduate, Integer isCurrent, Integer pageNum, Integer pageSize);

    /**
     * 获得当前学年学期的自增id
     * @return 第一个incremendids
     * @author 胡泽宽
     * @since 2.0.0 2018年11月24日 09:32:03
     */
    int presentId();

    /**
     * 获得当前学年学期的前后的几条记录的详细信息
     * @return List<SemesterEntity>
     * @author 胡泽宽
     * @since 2.0.0 2018年11月24日 10:21:53
     */
    List<SemesterEntity> getYearSemesterList(int startSemester, int endSemester);

    /**
     * 获得当前学年学期的前后的几条记录的详细信息map
     * @return LinkedHashMap<String, String>
     * @author 胡泽宽
     * @since 2.0.0 2018年11月24日 11:01:25
     */

    LinkedHashMap<String, String> getYearSemesterMap(int startSemester, int endSemester);

    /**
     * 获得当前学年学期code的前后的几条记录list<string>
     * @return List<String>
     * @author 胡泽宽
     * @since 2.0.0 2018年11月24日 12:24:00
     */
    List<String> getYearSemesterCode(int startSemester, int endSemester);

    /**
     * 获得当前学年学期name的前后的几条记录list<string>
     * @return List<String>
     * @author 胡泽宽
     * @since 2.0.0 2018年11月24日 12:24:00
     */
    List<String> getYearSemesterName(int startSemester, int endSemester);

    /**
     * 获得当前学年学期name的前后的几条记录list<string>
     * @return List<String>
     * @author 胡泽宽
     * @since 2.0.0 2018年11月24日 12:24:00
     */
    ItooResult exportByNameorCode(HttpServletResponse response, String searchContent);

    /**
     * 重复添加校验
     *
     * @param name code
     * @return Integer
     * @author 胡泽宽
     * @since 2.0.0 2018年11月25日 14:21:23
     */
    Integer checkSemesterbycodeorname(String name, String code);

    /**
     * 导入学年学期下载模板
     *
     * @param response 响应
     * @param searchContent 模糊查询的信息
     * @return 导出提供下载的模板
     * @author 胡泽宽
     * @since 2.0.0 2018年11月27日 14:33:32
     */
    ItooResult exportTemplate(HttpServletResponse response, String searchContent);


    /**
     * 批量导入学年学期
     *
     * @param multipartFile 批量导入的文件
     * @param request       请求
     * @param response      响应
     * @return ItooResult 批量导入的结果
     * @author 胡泽宽
     * @since 2.0.0 2018年11月27日 15:56:29
     */
    ItooResult importsemesterByTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);
    /**
     * 获取下一年的学年学期
     * @author 井朝
     * @since 2018年12月19日13:18:12S
     */
    List<SemesterEntity> getNextYearSemester();

    /**
     * 无参查询，返回本学期code
     *
     * @author 杨江涛
     * @since 2018年11月17日15:47:58
     * @return List<SemesterEntity>
     */
    List<SemesterEntity> selSemesterId();
}
